/*
 * @author Leandro Vasconcelos
 */

/* retorna array de 4 posições contendo:
 * [0] - bool indicando se a célula acima está marcada
 * [1] - bool indicando se a célula abaixo está marcada
 * [2] - object td acima ou nulo caso primeira linha
 * [3] - object td abaixo ou nulo caso última linha
 */
function initialCheck(td){
    var ret = new Array();
    var idx = td.cellIndex;
    var tr = td.parentNode;
    var trA = tr.previousElementSibling;
    var trB = tr.nextElementSibling;
    if (BrowserDetect.browser == "Explorer"){
        if (BrowserDetect.version < 9){
            trA = tr.previousSibling;
            trB = tr.nextSibling;
        }
    }
    var a = false;
    var tdA = null;
    var b = false;
    var tdB = null;
    if (trA != null){
        tdA = trA.cells[idx];
        if ($(tdA).hasClass('checkSelected')){
            a = true;
        }
    }
    if (trB != null){
        tdB = trB.cells[idx];
        if ($(tdB).hasClass('checkSelected')){
            b = true;
        }
    }
    ret[0] = a;
    ret[1] = b;
    ret[2] = tdA;
    ret[3] = tdB;
    return ret;
}

function clickCheck(){
    var td = this.parentNode;
    var array = initialCheck(td);
    var a = array[0];
    var b = array[1];
    var tdA = array[2];
    var tdB = array[3];
    var checked = this.checked;
    if(a && b && checked){
        paint(td);
        unifyGroup(td, tdA, tdB);
    }else if (a && b && !checked){
        depaint(td);
        devideGroup(td, tdB);
    }else if (a && !b && checked){
        paint(td);
    }else if (a && !b && !checked){
        depaint(td);
    }else if (!a && b && checked){
        paint(td);
        moveGroupUp(td, tdB);
    }else if (!a && b && !checked){
        depaint(td);
        moveGroupDown(td, tdB);
    }else if (!a && !b && checked){
        paint(td);
        addGroup(td);
    }else if (!a && !b && !checked){
        depaint(td);
        removeGroup(td);
    }
}

function paint(td){
    $(td).addClass('checkSelected');
}

function depaint(td){
    $(td).removeClass('checkSelected');
}

function getNextIdGrupo(){
    var id = 1000;
    $('.idGrupoSelecao').each(function(){
        if ($(this).css('display') == 'none'){
            divId = parseInt(this.id);
            id = divId < id ? divId : id;
        }
    });
    if (id != 1000){
        return id;
    }
    return $('.idGrupoSelecao').size() + 1
}

function addGroup(td){
    var idx = getNextIdGrupo();
    var elm = $('#'+idx).hasClass('idGrupoSelecao') ? $('#'+idx) : $('<div id="'+idx+'">'+idx+'</div>');
    $(elm).addClass('idGrupoSelecao radius');
    $(elm).click(addSelectedGroup);
    $('body').append(elm);
    var _top = $(td).offset().top;
    var _left = $(td).offset().left + 65;
    $('#'+idx).css({
        "left": _left+"px", 
        "top": _top+"px"
    });
    $(td).find('input').toggleClass();
    $(td).find('input').addClass(''+idx);
    $(elm).show();
}

function removeGroup(td){
    var divIdx = $(td).find('input').attr('class');
    var div = $('#'+divIdx);
    $(div).hide();
}

function moveGroupDown(td, tdB){
    var idx = $(td).find('input').attr('class');
    var _top = $(tdB).offset().top;
    var _left = $(tdB).offset().left + 65;
    $('#'+idx).css({
        "left": _left+"px", 
        "top": _top+"px"
    });
    $(tdB).find('input').toggleClass();
    $(td).find('input').toggleClass();
    $(tdB).find('input').addClass(''+idx);
}

function moveGroupUp(td, tdB){
    var idx = $(tdB).find('input').attr('class');
    var _top = $(td).offset().top;
    var _left = $(td).offset().left + 65;
    $('#'+idx).css({
        "left": _left+"px", 
        "top": _top+"px"
    });
    $(td).find('input').toggleClass();
    $(tdB).find('input').toggleClass();
    $(td).find('input').addClass(''+idx);
}

function devideGroup(td, tdB){
    $(tdB).find('input').toggleClass();
    addGroup(tdB);
    $(td).find('input').toggleClass();
}

function unifyGroup(td, tdA, tdB){
    var idx = $(tdA).find('input').attr('class');
    removeGroup(tdB);
    $(td).find('input').toggleClass();
    $(tdB).find('input').toggleClass();
//$(td).find('input').addClass(''+idx);
//$(tdB).find('input').addClass(''+idx);
}

function addSelectedGroup(obj){
    var div = obj.target;//div group
    var idx = $(div).attr('id');
    //buscar todos os td desse grupo
    var td = $('.'+idx).parent();
    var list = new Array();
    var ret = new Array();
    ret = getNextTDChecked(td, list);
    //ajustar hora inicial e final
    var nodes = $('.detalheSemanal thead tr').children()[ret[0].parent().children().index(ret[0])].childNodes;
    var dia = nodes[0].textContent + ' ' + nodes[2].textContent;
    var hora = $(list[0]).parent().children()[0].textContent.substring(0,5) + ' - ' + $(list[list.length - 1]).parent().children()[0].textContent.substring(6,13);
    //incluir na div o horario selecionado
    var li = '<li id="'+idx+'"><span>'+dia+'</span><span>'+hora+'</span><a href="javascript:remove('+idx+');">excluir</a></li>';
    AppendToSelecionados(li);
    //adicionar aos tds 'selecionado' e remover input check
}

function getNextTDChecked(td, list){
    var tr = $(td).parent();
    var idx = tr.children().index(td);
    var trB = $(tr).next();
    var tdB = null;
    if ($(td).hasClass('checkSelected')){
        list.push(td);
        if (trB != null){
            tdB = trB.children()[idx];
            getNextTDChecked(tdB, list);
        }
    }
    return list;
}

function AppendToSelecionados(li){
    $('#hr_selecionados ul').append(li);
    if ($('#hr_selecionados ul li').size() > 0){
        $('#hr_selecionados').show();
    }else{
        $('#hr_selecionados').hide();
    }
}

function remove(idx){
    $('#hr_selecionados ul li#'+idx).remove();
    if ($('#hr_selecionados ul li').size() > 0){
        $('#hr_selecionados').show();
    }else{
        $('#hr_selecionados').hide();
    }
}